package com.xl.jvm;

import java.util.ArrayList;

/**
 *  一、堆大小设置（堆 = 年轻代 + 年老代+ 持久代）
         -Xmx3550m：设置JVM最大可用内存为3550M。 默认电脑的1/4
         -Xms3550m：设置JVM初始内存为3550m。此值可以设置与-Xmx相同，以避免每次垃圾回收完成后JVM重新分配内存。  默认1/64
 　　若设置初始内存过大，比如-Xms8000m，这都超过了我电脑内存，则会报错
         Error occurred during initialization of VM
         Unable to allocate 256000KB bitmaps for parallel garbage collection for the requested 8192000KB heap
         Error: Could not create the Java Virtual Machine.
         Error: A fatal exception has occurred. Program will exit.
 　　若设置初始内存过小，比如-Xms10k，则会报错
         Error occurred during initialization of VM
         Too small initial heap
     若设置初始内存过小得让gc无法触发，比如-Xms1200k，则会报错。估算gc需要2500K的内存。
         Error occurred during initialization of VM
         GC triggered before VM initialization completed. Try increasing NewSize, current value 1536K.
         -Xss128k：设置每个线程的堆栈大小。（JDK5.0以后每个线程堆栈大小为1M）
         -Xmn1024m：设置年轻代大小为1024m。等效于同时配置下面两个。
         -XX:NewSize=1024m：设置年轻代初始值为1024M。
         -XX:MaxNewSize=1024m：设置年轻代最大值为1024M。。
     JVM8.0已经没有持久代，若设置则会警告
         Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=10m; support was removed in 8.0
     * -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError  初始内存 1m  最大可用内存8兆 当出现utOfMemoryError 异常,就从堆中把文件dump下来
 *
 * * -Xms1m -Xmx8m -XX:PrintGCDetails 打印GC回收信息
 *
 * @author Charley
 * @create 2021-03-20
 */
public class Demo01 {
    byte[] array= new byte[1*1024*1024];

    public static void main(String[] args) {
        ArrayList<Demo01> list = new ArrayList<>();
        int count=0;
        try {
            while (true) {
                list.add(new Demo01());//问题所在
                count =+ 1;
            }
        } catch (Error e) {
            System.out.println("count:"+count);
            e.printStackTrace();
        }
    }
}
